/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package wasolicitudesfiec.logicacontrol.SolicitarAperturaTopico;

import web.util.Constantes;
import com.sun.rave.web.ui.model.UploadedFile;
import entidad.Persona;
import entidad.Profesor;
import entidad.apertura.Solicitudaperturatopico;
import hero.interfaces.BnNodeValue;
import java.io.File;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import wasolicitudesfiec.AperturaTopico.SolicitarAperturaTopico;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.*;

/**
 *
 * @author kabad
 */
public class CTRL_SolicitarAperturaTopico  extends CTRL_Base {
 private SolicitarAperturaTopico gui;
  private final String nombreProcesoTopico = Constantes.Modelo.modelo_SolicitarAperturaTopico;
    private final String nombreActividadTopico = Constantes.SolicitarAperturaTopico.solicitarApertura;
    
   
     public CTRL_SolicitarAperturaTopico(SolicitarAperturaTopico gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
    }

  
    public void guardarActividadSolicitarAperturaTopico() throws MensajeException {
      String nombreInstanciaProceso;
        BnNodeValue actividad;
        Solicitudaperturatopico solicitud;
        try {
            if (!(usrSession != null && prjSession != null)) {
                throw new Exception();
            }
             if (!gui.getFuArchivo().getValueAsString(facesContext).equals("")) {
                String nombreArchivo = (String) gui.getFuArchivo().getValueAsString(facesContext);
                if ( nombreArchivo.indexOf(nombreProcesoTopico)>=0) {
                    throw new MensajeException("El nombre del archivo no es válido.");
                }
            }
            prjSession.instantiateProject(nombreProcesoTopico);
            nombreInstanciaProceso = prjSession.getName();
            actividad = usrSession.getNode(nombreInstanciaProceso, nombreActividadTopico);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            solicitud = llenarDatosActividadTopico(nombreInstanciaProceso);
            solicitud.setNombreinstanciaproceso(nombreInstanciaProceso);
            solicitud = logica.getLogAperturaTopico().nuevoSolicitudApertura(solicitud);
            prjSession.setProperty(Constantes.Atributo.idSolicitudProceso, solicitud.getIdSolicitudApertura() + "");
            solicitud = logica.getLogAperturaTopico().clonarSolicitudApertura(solicitud);
            prjSession.setNodeProperty(nombreActividadTopico, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudApertura() + "");
            usrSession.startActivity(nombreInstanciaProceso, nombreActividadTopico);
            usrSession.terminateActivity(nombreInstanciaProceso, nombreActividadTopico);

        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            ex.printStackTrace();
            Logger.getLogger(CTRL_SolicitarAperturaTopico.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }

 private Solicitudaperturatopico llenarDatosActividadTopico(String nombreInstanciaProceso) throws MensajeException, Exception {
        Solicitudaperturatopico solicitud = new Solicitudaperturatopico();
        try {
            
            solicitud.setTemaTopico((String) gui.getTxtaTema().getText());
            solicitud.setObservacionProfesor((String)gui.getTxtaObservaciones().getText());
            Profesor profesor = logica.leerProfesorPorUsuario(usuario.getUsuario());
            solicitud.setFkIdProfesor(profesor.getIdProfesor());
             solicitud.setEstado(Constantes.EstadoSolicitud.Activa.toString());
                       
            Vector<Persona> decano = logica.leerPersonaPorRol("Decano");
            solicitud.setFkIdDecano(decano.get(0).getIdPersona());
            
             if (!gui.getFuArchivo().getValueAsString(facesContext).equals("")) {
                String nombreArchivo = (String) gui.getFuArchivo().getValueAsString(facesContext);
               solicitud.setNombreArchivo(nombreArchivo);
                UploadedFile uploadedFile = gui.getFuArchivo().getUploadedFile();
                HttpServletRequest servletRequest = (HttpServletRequest) externalContext.getRequest();
                String pathRaiz = (String) servletRequest.getAttribute("path");
                String pathCarpetas = "/" + "Archivos" + "/" + "Solicitar Apertura Topico";
                File carpeta = new File(pathRaiz + pathCarpetas + "/" + nombreInstanciaProceso);
                carpeta.mkdirs();
                File file = new File(pathRaiz + pathCarpetas + "/" + nombreInstanciaProceso + "/" + nombreArchivo);
                uploadedFile.write(file);
                String relativePath = pathCarpetas + "/" + nombreInstanciaProceso + "/" + nombreArchivo;
                solicitud.setPathArchivoAdjunto(relativePath);
            }
        } catch (MensajeException ex) {
            throw ex;
        } catch (SQLException ex) {
            Logger.getLogger(CTRL_SolicitarAperturaTopico.class.getName()).log(Level.SEVERE, null, ex);
        }
        return solicitud;
    }
}
